import { useParams } from 'common' import { ChevronDown, FolderOpen, Settings, Shield, Trash2 } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { parseAsBoolean, useQueryState } from 'nuqs' import { useEffect } from 'react' import { toast } from 'sonner' import { Badge, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { DeleteBucketModal } from '@/components/interfaces/Storage/DeleteBucketModal' import { EditBucketModal } from '@/components/interfaces/Storage/EditBucketModal' import { EmptyBucketModal } from '@/components/interfaces/Storage/EmptyBucketModal' import { useSelectedBucket } from '@/components/interfaces/Storage/FilesBuckets/useSelectedBucket' import { PublicBucketWarning } from '@/components/interfaces/Storage/PublicBucketWarning' import { PUBLIC_BUCKET_TOOLTIP } from '@/components/interfaces/Storage/Storage.constants' import StorageBucketsError from '@/components/interfaces/Storage/StorageBucketsError' import { StorageExplorer } from '@/components/interfaces/Storage/StorageExplorer/StorageExplorer' import { useBucketPolicyCount } from '@/components/interfaces/Storage/useBucketPolicyCount' import DefaultLayout from '@/components/layouts/DefaultLayout' import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' import { StorageExplorerStateContextProvider } from '@/state/storage-explorer' import type { NextPageWithLayout } from '@/types' const BucketPage: NextPageWithLayout = () => { const router = useRouter() const { bucketId, ref } = useParams() const { data: bucket, error, isSuccess, isError } = useSelectedBucket() const [showEditModal, setShowEditModal] = useQueryState( 'edit', parseAsBoolean.withDefault(false).withOptions({ history: 'push', clearOnDefault: true }) ) const [showEmptyModal, setShowEmptyModal] = useQueryState( 'empty', parseAsBoolean.withDefault(false).withOptions({ history: 'push', clearOnDefault: true }) ) const [showDeleteModal, setShowDeleteModal] = useQueryState( 'delete', parseAsBoolean.withDefault(false).withOptions({ history: 'push', clearOnDefault: true }) ) const { getPolicyCount } = useBucketPolicyCount() const policyCount = bucket ? getPolicyCount(bucket.id) : 0 useEffect(() => { if (isSuccess && !bucket) { toast.info(`Bucket "${bucketId}" does not exist in your project`) router.push(`/project/${ref}/storage/files`) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isSuccess]) if (isError) { return } return ( {bucketId} {bucket?.public && ( Public {PUBLIC_BUCKET_TOOLTIP} )} } breadcrumbs={[ { label: 'Files', href: `/project/${ref}/storage/files`, }, { label: 'Buckets', href: `/project/${ref}/storage/files`, }, ]} primaryActions={ <> setShowEditModal(true)} >

Bucket settings

setShowEmptyModal(true)} >

Empty bucket

setShowDeleteModal(true)} >

Delete bucket

} >
{ref && bucketId && }
{bucket && ( <> setShowEditModal(false)} /> setShowEmptyModal(false)} /> setShowDeleteModal(false)} /> )}
) } BucketPage.getLayout = (page) => ( {page} ) export default BucketPage